﻿using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace Onshi.POS.Repositorios
{
    public class RepositorioBarrios : RepositorioEntidad<Barrio, Int32, IServicioDatosBarrios>
    {
        #region Constructores

        public RepositorioBarrios()
            : base()
        {
        }

        #endregion

        #region Atributos

        private RepositorioLocalidades repositorioLocalidades = new RepositorioLocalidades();

        #endregion

        #region Metodos

        protected override Barrio FilaAEntidad(DataRow fila)
        {
            var barrio = new Barrio();
            barrio.Id = (Int32)fila["IdBarrio"];
            barrio.Nombre = (String)fila["Nombre"];
            barrio.Observaciones = (String)fila["Observaciones"];
            barrio.Localidad = repositorioLocalidades.DevolverPorId((Int32)fila["IdLocalidad"]);
            return barrio;
        }

        public override Barrio DevolverPorId(Int32 id)
        {
            var barrio = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (barrio == null)
                using (var ds = servicioDatos.Barrios_DevolverPorId(id))
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        barrio = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(barrio);
                    }
            return barrio;
        }

        public void Insertar(Barrio barrio)
        {
            barrio.Id = servicioDatos.Barrios_Insertar(barrio.Localidad.Id, barrio.Nombre, barrio.Observaciones);
        }

        public void Modificar(Barrio barrio)
        {
            servicioDatos.Barrios_Modificar(barrio.Id, barrio.Localidad.Id, barrio.Nombre, barrio.Observaciones);
        }

        public void Eliminar(Barrio barrio)
        {
            servicioDatos.Barrios_Eliminar(barrio.Id);
            barrio = null;
        }

        public List<Barrio> DevolverTodos()
        {
            using (var ds = servicioDatos.Barrios_DevolverTodos())
                entidades = TablaALista(ds.Tables[0]);
            return entidades;
        }

        public void ModificarLocalidad(Localidad localidadNuevo, Localidad localidadViejo)
        {
            servicioDatos.Barrios_ModificarLocalidad(localidadNuevo.Id, localidadViejo.Id);
        }

        #endregion
    }
}